package com.sisgesbyte.web.managedBean.mantenimiento.administracion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.event.SelectEvent;

import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.services.administracion.MantenimientoProducto;
import com.sisgesbyte.services.administracion.bean.ProductoBean;
import com.sisgesbyte.services.administracion.bean.ProductoListaResponse;
import com.sisgesbyte.services.proyeccion.bean.ListaProyeccionClienteDetalleBean;
import com.sisgesbyte.services.proyeccion.bean.ListaProyeccionFfvvDetalleBean;
import com.sisgesbyte.services.proyeccion.bean.ProyProductoPeriodoBean;
import com.sisgesbyte.services.proyeccion.bean.ProyZonaDetalleBean;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionCatClienteDetalleBean;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionGeneralBean;
import com.sisgesbyte.web.managedBean.proyeccion.MantProyeccionCanalesMBean;
import com.sisgesbyte.web.managedBean.proyeccion.MantProyeccionClientesMBean;
import com.sisgesbyte.web.managedBean.proyeccion.MantProyeccionFfvvMBean;
import com.sisgesbyte.web.managedBean.proyeccion.MantProyeccionGeneralMBean;
import com.sisgesbyte.web.managedBean.proyeccion.MantProyeccionPeriodoMBean;
import com.sisgesbyte.web.managedBean.proyeccion.MantProyeccionZonaMBean;

@ManagedBean
@ViewScoped
public class BuscarProductoMBean implements Serializable {

	private static final long serialVersionUID = 1L;
	@EJB
	private MantenimientoProducto mantenimientoProducto;
	@ManagedProperty(value = "#{mantProyeccionGeneralMBean}")
	private MantProyeccionGeneralMBean mantProyeccionGeneralMBean;
	@ManagedProperty(value = "#{mantProyeccionPeriodoMBean}")
	private MantProyeccionPeriodoMBean mantProyeccionPeriodoMBean;
	@ManagedProperty(value = "#{mantProyeccionZonaMBean}")
	private MantProyeccionZonaMBean mantProyeccionZonaMBean;
	@ManagedProperty(value = "#{mantProyeccionCanalesMBean}")
	private MantProyeccionCanalesMBean mantProyeccionCanalesMBean;
	@ManagedProperty(value = "#{mantProyeccionFfvvMBean}")
	private MantProyeccionFfvvMBean mantProyeccionFfvvMBean;
	@ManagedProperty(value = "#{mantProyeccionClientesMBean}")
	private MantProyeccionClientesMBean mantProyeccionClientesMBean;
	
	private List<ProductoBean> listaProductos;
	private List<ProductoBean> listaProductosTemporal;
	private ProductoBean selectedProducto;
	private String txtBuscar;

	@PostConstruct
	private void init() {
		txtBuscar = "";
		inicializar();
	}

	public void inicializar() {
		try {
			FiltrosSQLBean filtro = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			FiltrosBean filtroCampos = new FiltrosBean();
			List<String> campos = new ArrayList<String>();
			campos.add("p.active");
			filtroCampos.setCampos(campos);
			filtroCampos.setOperador("=");
			listaFiltros.add(filtroCampos);
			List<Object> valores = new ArrayList<Object>();
			valores.add(true);
			filtro.setListaFiltros(listaFiltros);
			filtro.setListaValores(valores);
			
			ProductoListaResponse response = mantenimientoProducto.listaProductos(ObtenerIdTransaccion(), filtro);

			if (Integer.valueOf(response.getCodigoRespuesta()) > -1) {
				this.listaProductos = response.getListaProductos();
				this.listaProductosTemporal = listaProductos;
			} else {
				System.out.println("No se encontro Data " + response.getMensajeRespuesta());
			}
		} catch (Exception e) {
			System.out.println("Ocurrio un error al cargar Lista " + e);
		}
	}

	public String ObtenerIdTransaccion() {
		FacesContext fCtx = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fCtx.getExternalContext()
				.getSession(false);
		String sessionId = session.getId().replace(".undefined", "");
		return sessionId;
	}

	public void buscar() {
		if(txtBuscar.trim().length() == 0){
			this.listaProductosTemporal = listaProductos;
		}
		if (txtBuscar.trim().length() > 0) {
			listaProductosTemporal = new ArrayList<ProductoBean>();
			for (ProductoBean ls : listaProductos) {
				if ((ls.getId() + " - " + ls.getCod_prod() + " - "
						+ ls.getMarca() + " - " + ls.getCategoria_producto()
						+ " - " + ls.getProducto()).toLowerCase().contains(
						txtBuscar.toLowerCase())) {
					listaProductosTemporal.add(ls);
				}
			}
		}
	}

	public String getTxtBuscar() {
		return txtBuscar;
	}

	public void dobleSelect(SelectEvent event) {
		ProductoBean selected = (ProductoBean) event.getObject();
		setSelectedProducto(selected);
		List<ProyeccionGeneralBean> selectedProyeccion = new ArrayList<ProyeccionGeneralBean>();
		ProyeccionGeneralBean bean = new ProyeccionGeneralBean();
		bean.setProductoId(selectedProducto.getId());
		bean.setCodProd(selectedProducto.getCod_prod());
		bean.setProducto(selectedProducto.getProducto());
		selectedProyeccion.add(bean);
		mantProyeccionGeneralMBean.setSelectedProyeccion(selectedProyeccion);
	}
	public void dobleSelectPeriodo(SelectEvent event) {
		ProductoBean selected = (ProductoBean) event.getObject();
		setSelectedProducto(selected);
		List<ProyProductoPeriodoBean> selectedProyeccion = new ArrayList<ProyProductoPeriodoBean>();
		ProyProductoPeriodoBean bean = new ProyProductoPeriodoBean();
		bean.setProductoId(selectedProducto.getId());
		bean.setCodProd(selectedProducto.getCod_prod());
		bean.setProducto(selectedProducto.getProducto());
		selectedProyeccion.add(bean);
		mantProyeccionPeriodoMBean.setSelectedProyeccionPeriodo(selectedProyeccion);
	}
	public void dobleSelectZona(SelectEvent event) {
		ProductoBean selected = (ProductoBean) event.getObject();
		setSelectedProducto(selected);
		List<ProyZonaDetalleBean> selectedProyeccion = new ArrayList<ProyZonaDetalleBean>();
		ProyZonaDetalleBean bean = new ProyZonaDetalleBean();
		bean.setProductoId(selectedProducto.getId());
		bean.setCodProd(selectedProducto.getCod_prod());
		bean.setProducto(selectedProducto.getProducto());
		selectedProyeccion.add(bean);
		mantProyeccionZonaMBean.setSelectedProyeccionZonaDetalle(selectedProyeccion);
	}
	public void dobleSelectCanal(SelectEvent event) {
		ProductoBean selected = (ProductoBean) event.getObject();
		setSelectedProducto(selected);
		List<ProyeccionCatClienteDetalleBean> selectedProyeccion = new ArrayList<ProyeccionCatClienteDetalleBean>();
		ProyeccionCatClienteDetalleBean bean = new ProyeccionCatClienteDetalleBean();
		bean.setProductoId(selectedProducto.getId());
		bean.setCodProd(selectedProducto.getCod_prod());
		bean.setProducto(selectedProducto.getProducto());
		selectedProyeccion.add(bean);
		mantProyeccionCanalesMBean.setSelectedProyClienteDetalle(selectedProyeccion);
	}
	public void dobleSelectFfvv(SelectEvent event) {
		ProductoBean selected = (ProductoBean) event.getObject();
		setSelectedProducto(selected);
		List<ListaProyeccionFfvvDetalleBean> selectedProyeccion = new ArrayList<ListaProyeccionFfvvDetalleBean>();
		ListaProyeccionFfvvDetalleBean bean = new ListaProyeccionFfvvDetalleBean();
		bean.setProductoId(selectedProducto.getId());
		bean.setCodProd(selectedProducto.getCod_prod());
		bean.setProducto(selectedProducto.getProducto());
		selectedProyeccion.add(bean);
		mantProyeccionFfvvMBean.setSelectedProyeccionFfvvDetalle(selectedProyeccion);
	}
	public void dobleSelectCliente(SelectEvent event) {
		ProductoBean selected = (ProductoBean) event.getObject();
		setSelectedProducto(selected);
		List<ListaProyeccionClienteDetalleBean> selectedProyeccion = new ArrayList<ListaProyeccionClienteDetalleBean>();
		ListaProyeccionClienteDetalleBean bean = new ListaProyeccionClienteDetalleBean();
		bean.setProductoId(selectedProducto.getId());
		bean.setCodProd(selectedProducto.getCod_prod());
		bean.setProducto(selectedProducto.getProducto());
		selectedProyeccion.add(bean);
		mantProyeccionClientesMBean.setSelectedProyeccionClienteDetalle(selectedProyeccion);
	}
	public void setTxtBuscar(String txtBuscar) {
		this.txtBuscar = txtBuscar;
	}

	public List<ProductoBean> getListaProductos() {
		return listaProductos;
	}

	public void setListaProductos(List<ProductoBean> listaProductos) {
		this.listaProductos = listaProductos;
	}

	public ProductoBean getSelectedProducto() {
		return selectedProducto;
	}

	public void setSelectedProducto(ProductoBean selectedProducto) {
		this.selectedProducto = selectedProducto;
	}

	public List<ProductoBean> getListaProductosTemporal() {
		return listaProductosTemporal;
	}

	public void setListaProductosTemporal(
			List<ProductoBean> listaProductosTemporal) {
		this.listaProductosTemporal = listaProductosTemporal;
	}

	public MantProyeccionGeneralMBean getMantProyeccionGeneralMBean() {
		return mantProyeccionGeneralMBean;
	}

	public void setMantProyeccionGeneralMBean(
			MantProyeccionGeneralMBean mantProyeccionGeneralMBean) {
		this.mantProyeccionGeneralMBean = mantProyeccionGeneralMBean;
	}

	public MantProyeccionPeriodoMBean getMantProyeccionPeriodoMBean() {
		return mantProyeccionPeriodoMBean;
	}

	public void setMantProyeccionPeriodoMBean(
			MantProyeccionPeriodoMBean mantProyeccionPeriodoMBean) {
		this.mantProyeccionPeriodoMBean = mantProyeccionPeriodoMBean;
	}

	public MantProyeccionZonaMBean getMantProyeccionZonaMBean() {
		return mantProyeccionZonaMBean;
	}

	public void setMantProyeccionZonaMBean(
			MantProyeccionZonaMBean mantProyeccionZonaMBean) {
		this.mantProyeccionZonaMBean = mantProyeccionZonaMBean;
	}

	public MantProyeccionCanalesMBean getMantProyeccionCanalesMBean() {
		return mantProyeccionCanalesMBean;
	}

	public void setMantProyeccionCanalesMBean(
			MantProyeccionCanalesMBean mantProyeccionCanalesMBean) {
		this.mantProyeccionCanalesMBean = mantProyeccionCanalesMBean;
	}

	public MantProyeccionFfvvMBean getMantProyeccionFfvvMBean() {
		return mantProyeccionFfvvMBean;
	}

	public void setMantProyeccionFfvvMBean(
			MantProyeccionFfvvMBean mantProyeccionFfvvMBean) {
		this.mantProyeccionFfvvMBean = mantProyeccionFfvvMBean;
	}

	public MantProyeccionClientesMBean getMantProyeccionClientesMBean() {
		return mantProyeccionClientesMBean;
	}

	public void setMantProyeccionClientesMBean(
			MantProyeccionClientesMBean mantProyeccionClientesMBean) {
		this.mantProyeccionClientesMBean = mantProyeccionClientesMBean;
	}
	
}
